#include "controller.h"
#include <QDebug>
#include <limits>

Controller::Controller(QObject *parent) :
    QObject(parent)
{

}
Controller::Controller(int numeroProdutor,int numeroConsumidor,int bufferSize,int TotalProdutos, QTableWidget * tabelaThreads)
{
	this->numeroConsumidor = numeroConsumidor;
	this->numeroProdutor = numeroProdutor;
	this->bufferSize = bufferSize;
        this->produtor = new  Produtor*[numeroProdutor];
        this->consumidor = new Consumidor*[numeroConsumidor];

				//cria tabela de threads
				this->threadTabelaThreads = new TabelaThreads(tabelaThreads, numeroProdutor, numeroConsumidor, this->produtor, this->consumidor);


				this->buffer = new Buffer(bufferSize,TotalProdutos);
        this->antEscrito = -1;


}
void Controller::inicializaThreads(){

    for(int i=0;i<numeroProdutor;i++){
        this->produtor[i]=new Produtor(buffer);
        this->produtor[i]->start();
        this->produtor[i]->setPriority(QThread::HighPriority);
   }
    for(int i=0;i<numeroConsumidor;i++){
        this->consumidor[i]=new Consumidor(buffer);
        this->consumidor[i]->start();
        //this->consumidor[i]->setPriority(QThread::HighestPriority);
    }
		this->threadTabelaThreads->start();
}
void Controller::setTable(QTableWidget* tabela){
        this->tabela=tabela;
        tabela->setRowCount(1);
        tabela->setColumnCount(bufferSize);
        //tabela->clear();
        connect(buffer,SIGNAL(mudouBuffer(int*,int,QMutex *)),this,SLOT(trataMudanca(int*,int,QMutex *)));
        connect(buffer,SIGNAL(leuBuffer(int*,int,QMutex *)),this,SLOT(trataLeitura(int*,int,QMutex *)));
}
void Controller::trataMudanca(int * buffer,int i,QMutex * mutex){
        //qDebug()<<"recebeu mudança do vetor";
        for(int j=0;j<bufferSize;j++){

                QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(buffer[i]));
                if(j==i){
                newItem->setBackground(QBrush(Qt::blue));
                }
                tabela->setItem(0,i, newItem);
        }
//	if(antEscrito!=-1){

//            QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(buffer[antEscrito]));
//            newItem->setData(Qt::BackgroundRole,Qt::white);

//            newItem->setForeground(tabela->itemAt(0,i)->foreground());
//            tabela->setItem(0,antEscrito,newItem);
//        }
//       antEscrito = i ;
		 //   mutex->unlock();

}
void Controller::trataLeitura(int * buffer,int i,QMutex * mutex){
    for(int j=0;j<bufferSize;j++){

            QTableWidgetItem *newItem = new QTableWidgetItem(tr("%1").arg(std::numeric_limits<int>::max()));
            if(j==i){
            newItem->setData(Qt::ForegroundRole,Qt::red);
            }
            tabela->setItem(0,i, newItem);
    }
					//mutex->unlock();
}




